home *** CD-ROM | disk | FTP | other *** search
/ Reverse Code Engineering RCE CD +sandman 2000 / ReverseCodeEngineeringRceCdsandman2000.iso / RCE / Tools / Win95 Secrets / SETUP.Z / SHOWSEH.C < prev    next >
Encoding:
C/C++ Source or Header  |  1995-07-19  |  1.7 KB  |  106 lines

  1. //==================================
  2. // SHOWSEH - Matt Pietrek 1995
  3. // FILE: SHOWSEH.C
  4. //==================================
  5. #include <windows.h>
  6. #include <stdio.h>
  7. #pragma hdrstop
  8. #include "tib.h"
  9.  
  10. void _except_handler3(void);
  11.  
  12. void DisplaySEHChain(void)
  13. {
  14.     PTIB ptib;
  15.     PSEH_record psehrec;
  16.     
  17.     __asm {
  18.             mov     ax, fs
  19.             mov     es, ax
  20.             mov     eax, 18h
  21.             mov     ebx, es:[eax]
  22.             mov     [ptib], ebx
  23.     }
  24.     
  25.     psehrec = ptib->pvExcept;
  26.  
  27.     printf("next rec  handler\n"
  28.            "========  ========\n" );
  29.  
  30.     while ( psehrec != (PSEH_record)0xFFFFFFFF )
  31.     {
  32.         printf("%08X  %08X\n", psehrec->pNext, psehrec->pfnHandler);
  33.         psehrec = psehrec->pNext;
  34.     }
  35.  
  36.     printf("\n");
  37. }
  38.  
  39. void c(void)
  40. {
  41.     DWORD   _esp;
  42.     
  43.     __asm   mov     [_esp], esp
  44.     __try
  45.     {
  46.         DisplaySEHChain();
  47.     }
  48.     __except( 1 )
  49.     {
  50.     }
  51.     
  52.     printf("in    c(), ESP = %08X\n", _esp);
  53. }
  54.  
  55. void b(void)
  56. {
  57.     DWORD   _esp;
  58.     
  59.     __asm   mov     [_esp], esp
  60.  
  61.     __try
  62.     {
  63.         c();
  64.     }
  65.     __except( 1 )
  66.     {
  67.     }
  68.  
  69.     printf("in    b(), ESP = %08X\n", _esp);
  70. }
  71.  
  72. void a(void)
  73. {
  74.     DWORD   _esp;
  75.     
  76.     __asm   mov     [_esp], esp
  77.  
  78.     __try
  79.     {
  80.         b();
  81.     }
  82.     __except( 1 )
  83.     {
  84.     }
  85.     printf("in    a(), ESP = %08X\n", _esp);
  86. }
  87.  
  88. int main()
  89. {
  90.     DWORD   _esp;
  91.     
  92.     printf("offset of __except_handler3: %08X\n\n", _except_handler3);
  93.  
  94.     __asm   mov     [_esp], esp
  95.     
  96.     __try
  97.     {
  98.         a();
  99.         printf("in main(), ESP = %08X\n", _esp);
  100.     }
  101.     __except( 1 )
  102.     {
  103.     }
  104.     
  105.     return 0;
  106. }